/**
 *	@file	tr_house_data.h
 *	@brief	トレーナーハウス　データ型定義
 *	@author	Miyuki Iwasawa
 *	@date	09.03.25
 *
 *	includeフォルダにおいていますが、このファイルのincludeは許可制です by iwasawa
 *
 *	許可リスト
 *	savedata/tr_house.c
 *	tr_house/tr_house_phc.c
 *	field/fld_trhouse.c
 *	field/fld_trhouse_st.c
 *	field/fld_trhouse_ol.c
 */

#ifndef __H_TR_HOUSE_DATA_H__
#define __H_TR_HOUSE_DATA_H__

#define TR_HOUSE_TRAINER_MAX	(10)	///<セーブするトレーナーデータのmax
#define TR_HOUSE_HIKARU_ID		(TR_HOUSE_TRAINER_MAX)

#define TR_HOUSE_POKE_MAX		(6)		///<トレーナーの手持ちポケモンmax


//============================================================================================
/**
 *	トレーナーハウス　データ型
 */
//============================================================================================
/**
 * @brief	ハウス用ポケモンデータ型
 * セーブデータとやり取りするのでsavedata/b_tower.hにtypedef定義を切り
 * 不完全ポインタでやり取りできるようにしておく
 *
 * 56byte
 */
struct _TR_HOUSE_POKEMON{
	union{
		struct{
			u16	mons_no:11;	///<モンスターナンバー
			u16	form_no:5;	///<モンスターナンバー
		};
		u16	mons_param;
	};
	u16	item_no;	///<装備道具

	u16	waza[WAZA_TEMOTI_MAX];		///<所持技
	u32	id_no;					///<IDNo
	u32	personal_rnd;			///<個性乱数

	union{
		struct{
		u32	hp_rnd		:5;		///<HPパワー乱数
		u32	pow_rnd		:5;		///<POWパワー乱数
		u32	def_rnd		:5;		///<DEFパワー乱数
		u32	agi_rnd		:5;		///<AGIパワー乱数
		u32	spepow_rnd	:5;		///<SPEPOWパワー乱数
		u32	spedef_rnd	:5;		///<SPEDEFパワー乱数
		u32				:2;		//余り
		};
		u32 power_rnd;
	};

	union{
		struct{
		u8	hp_exp;				///<HP努力値
		u8	pow_exp;			///<POW努力値
		u8	def_exp;			///<DEF努力値
		u8	agi_exp;			///<AGI努力値
		u8	spepow_exp;			///<SPEPOW努力値
		u8	spedef_exp;			///<SPEDEF努力値
		};
		u8 exp[6];
	};
	union{
		struct{
		u8	pp_count0:2;	///<技1ポイントアップ
		u8	pp_count1:2;	///<技2ポイントアップ
		u8	pp_count2:2;	///<技3ポイントアップ
		u8	pp_count3:2;	///<技4ポイントアップ
		};
		u8 pp_count;
	};

	u8	country_code;			///<国コード

	u8	tokusei;				///<特性
	u8	natuki;				///<なつき度

	u8	level;

	//ニックネーム ((MONS_NAME_SIZE:10*2)=20
	//EOMコードを含まないサイズなので、アクセス時に注意！
	STRCODE	nickname[MONS_NAME_SIZE];
};

//ハウストレーナーデータ
// 48byte
struct _TR_HOUSE_PLAYER{
	u32		tr_id;		///<トレーナーID
	u8		obj_code;	///<unionの見た目ナンバー(OBJコード)
	u8		region;		///<国コード
	u8		version;	///<ROMバージョン
	u8		tr_sex;		///<プレイヤー性別
	STRCODE	name[PERSON_NAME_SIZE+EOM_SIZE];	//8*2 = 16

	PMS_DATA	word[TR_HOUSE_PMSG_MAX];	//登場,勝利,敗退メッセージ
};

//ハウス　対戦相手データ構造体
struct _TR_HOUSE_TRAINER{
	TR_HOUSE_PLAYER				player;			//トレーナーデータ
	struct _TR_HOUSE_POKEMON	poke[TR_HOUSE_POKE_MAX];		//持ちポケモンデータ
};

//トレーナーハウスセーブデータ型
struct _TR_HOUSE_SAVE{
	TR_HOUSE_TRAINER	trainer[TR_HOUSE_TRAINER_MAX];
//	u8	buf[1100];
};

#endif //__H_TR_HOUSE_DATA_H__